package com.mars.admin.modules.post.mapper;

import com.mars.admin.modules.post.entity.PostComment;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 帖子评论Mapper接口
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
@Mapper
public interface PostCommentMapper extends BaseMapper<PostComment> {

    /**
     * 根据帖子ID删除所有评论
     *
     * @param postId 帖子ID
     * @return 删除数量
     */
    int deleteByPostId(@Param("postId") Long postId);

    /**
     * 根据帖子ID查询评论列表
     *
     * @param postId 帖子ID
     * @param page 分页参数
     * @return 评论列表
     */
    Page<PostComment> selectByPostId(@Param("postId") Long postId, Page<PostComment> page);

    /**
     * 根据用户ID查询评论列表
     *
     * @param userId 用户ID
     * @param page 分页参数
     * @return 评论列表
     */
    Page<PostComment> selectByUserId(@Param("userId") Long userId, Page<PostComment> page);

    /**
     * 根据父评论ID查询子评论列表
     *
     * @param parentId 父评论ID
     * @param page 分页参数
     * @return 子评论列表
     */
    Page<PostComment> selectByParentId(@Param("parentId") Long parentId, Page<PostComment> page);

    /**
     * 根据帖子ID统计评论数量
     *
     * @param postId 帖子ID
     * @return 评论数量
     */
    int countByPostId(@Param("postId") Long postId);

    /**
     * 根据用户ID统计评论数量
     *
     * @param userId 用户ID
     * @return 评论数量
     */
    int countByUserId(@Param("userId") Long userId);

    /**
     * 根据父评论ID统计子评论数量
     *
     * @param parentId 父评论ID
     * @return 子评论数量
     */
    int countByParentId(@Param("parentId") Long parentId);

    /**
     * 查询热门评论
     *
     * @param postId 帖子ID
     * @param limit 限制数量
     * @return 热门评论列表
     */
    List<PostComment> selectHotComments(@Param("postId") Long postId, @Param("limit") Integer limit);

    /**
     * 查询最新评论
     *
     * @param postId 帖子ID
     * @param limit 限制数量
     * @return 最新评论列表
     */
    List<PostComment> selectLatestComments(@Param("postId") Long postId, @Param("limit") Integer limit);

    /**
     * 更新评论点赞数
     *
     * @param commentId 评论ID
     * @param increment 增量
     * @return 更新结果
     */
    int updateLikeCount(@Param("commentId") Long commentId, @Param("increment") Integer increment);

    /**
     * 更新评论回复数
     *
     * @param commentId 评论ID
     * @param increment 增量
     * @return 更新结果
     */
    int updateReplyCount(@Param("commentId") Long commentId, @Param("increment") Integer increment);
} 